package com.ssky.bean.validator.core.checker;

import com.ssky.bean.validator.core.IValidatorContext;
import com.ssky.bean.validator.core.exception.VldException;
import org.apache.commons.lang3.StringUtils;

import java.util.regex.Pattern;

/**
 *
 *<li/> 针对String类型校验；如果其他类型使用该规则，会调用toString()方法得到字符串值再进行校验。
 * @Author: ssky
 * @Date: 2021/07/30
 * @Description:
 */
public class RegexChecker<V, L, B> extends AbstractChecker<V, L, B> {

    /**
     * <li/>set
     * java 正则表达式
     */
    private String regex;

    private Pattern pattern;


    @Override
    public void initz() {
        if (StringUtils.isBlank(this.regex)) {
            throw new VldException("Rule:" + getId() + " Config Error : The \"regex\" property value not empty !");
        }
        this.pattern = Pattern.compile(this.regex);
    }


    /**
     * 具体规则执行器
     *
     * @param v   规则校验的当前值
     * @param l   当前值作为属性的所在对象
     * @param b   当前值所在的顶级javaBean对象
     * @param ctx 上下文（针对具体规则的实现要求，可基于接口IValidatorContext扩展）
     * @return 校验通过返回true, 不通过返回false
     */
    @Override
    public boolean process(V v, L l, B b, IValidatorContext ctx) {
        if (null == v) {
            return true;
        }

        String vStr = null;

        if (v instanceof String) {
            vStr = (String) v;
        } else {
            vStr = v.toString();
        }

        if (this.pattern.matcher(vStr).matches()) {
            return true;
        }
        return false;
    }


    public String getRegex() {
        return regex;
    }

    public void setRegex(String regex) {
        this.regex = regex;
    }
}
